package servlet;


/*
判断动作行为
显示所有书籍  /books/findAll
查找书籍    /books/find
增加书籍    /books/add
修改书籍    /books/update
删除书籍    /books/remove
 */


import dao.BooksDao;
import dao.UsersDao;
import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import pojo.Books;
import pojo.BorrowRecords;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Date;
import java.util.List;

@WebServlet("/books/*")// "/*"是为了能跟各种请求对应上
public class BooksServlet extends BaseServlet {

    private BooksDao booksDao = new BooksDao();
    private UsersDao usersDao = new UsersDao();


    /**
     * 1.实现还书功能（把available改成1），
     * 2.记录实际还书时间return_date，判断 （return_date - borrow_date）是否超过7天
     * 3.if <=3 ，else记录1次违规
     * 4.把借书信息清除
     * 5.判断用户违规次数violation_count，if >=3,则禁用（status = 0)
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    protected void returnBook(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html; charset=utf-8");
        PrintWriter out = resp.getWriter();

        //          获得本次还书的用户id
        HttpSession session = req.getSession();//获得session对象
        Integer userId = (Integer)session.getAttribute("userId");// 从Session中获取用户ID

        // 从查询字符串中获取bookId
        String bookIdParam = req.getParameter("bookId");
        if (bookIdParam != null) {
            try {
                int bookId = Integer.parseInt(bookIdParam); // 将字符串转换为Integer类型
                System.out.println("bookId=" + bookId);
                // 调用booksDao的borrowBook方法，传入bookId,
                // 将available改为0，在borrow_records删除借书信息
                // 调用booksDao的returnBook方法，传入bookId
                int row = booksDao.returnBook(bookId,userId);

                // 根据操作结果进行相应处理，例如重定向或设置属性
                if (row > 0) {
                    // 操作成功，可能需要重定向或设置消息
                    System.out.println("bookId="+bookId);
                    resp.sendRedirect("/returnSuccess.html");
                } else {
                    // 操作失败，处理错误情况
                    System.out.println("bookId="+bookId);
                    resp.sendRedirect("/returnFail.html");
                }
            } catch (NumberFormatException e) {
                // 转换错误，bookId不是有效的数字
                System.out.println("bookId不是有效的数字");
                out.write("bookId不是有效的数字");
            }
        } else {
            // bookId参数不存在
            System.out.println("bookId参数不存在");
            out.write("bookId参数不存在");
        }
    }

    /**
     * 实现借书功能（把available改成0），添加借书信息
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    protected void borrowBook(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html; charset=utf-8");
        PrintWriter out = resp.getWriter();

//          获得本次借书的用户id
        HttpSession session = req.getSession();//获得session对象
        Integer userId = (Integer)session.getAttribute("userId");// 从Session中获取用户ID

        // 从查询字符串中获取bookId
        String bookIdParam = req.getParameter("bookId");
        if (bookIdParam != null && userId != null) {
            try {
                int bookId = Integer.parseInt(bookIdParam); // 将字符串转换为int类型
                System.out.println("bookId=" + bookId);
                // 调用booksDao的borrowBook方法，传入bookId,
                // 将available改为0，在borrow_records添加借书信息
                int row = booksDao.borrowBook(bookId,userId);

                // 根据操作结果进行相应处理，例如重定向或设置属性
                if (row > 0) {
                    // 操作成功，可能需要重定向或设置消息
                    System.out.println("bookId="+bookId);
                    resp.sendRedirect("/borrowSuccess.html");
                } else {
                    // 操作失败，处理错误情况
                    System.out.println("bookId="+bookId);
                    resp.sendRedirect("/borrowFail.html");
                }
            } catch (NumberFormatException e) {
                // 转换错误，bookId不是有效的数字
                System.out.println("bookId不是有效的数字");
                out.write("bookId不是有效的数字");

            }
        } else {
            // bookId参数不存在
            System.out.println("bookId参数不存在");
            out.write("bookId参数不存在");
        }


    }

    /**
     * 实现查找所有书的功能
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    protected void findAll(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html; charset=utf-8");
        PrintWriter out = resp.getWriter();
        System.out.println("findAll");

        //          获得本次登录的用户id
        HttpSession session = req.getSession();//获得session对象
        Integer userId = (Integer)session.getAttribute("userId");// 从Session中获取用户ID
        int status = usersDao.checkStatus(userId);
        if(status == 0){
            resp.sendRedirect("/fail.html");
        }

//        书本数据用集合接收
        List<Books> booksList=booksDao.findAllBook();

        // 将list添加到请求属性中，以便在JSP页面中使用
        req.setAttribute("booksList", booksList);

        // 转发请求到JSP页面
        RequestDispatcher dispatcher = req.getRequestDispatcher("/booksList.jsp");
        dispatcher.forward(req, resp);
    }

    /**
     * 实现根据当前登录用户的id查找书的功能（查找对应user_id借的书）
     * 再实现根据当前id查找借的书的结束日期和死线功能（查找对应user_id借的书的结束日期和借书死线）
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    protected void findBookByUserId(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();
        Integer userId = (Integer) session.getAttribute("userId"); // 从Session中获取用户ID
        System.out.println("从Session中获取用户ID="+userId);
        if (userId != null) {
            // 使用userId来查询书籍,数据用集合接收
            List<Books> booksList = booksDao.findBookByUserId(userId);
            // 使用userId来查询书籍记录,数据用集合接收
//            List<BorrowRecords> borrowRecordsList = booksDao.findBorrowRecordsByUserId(userId);

            // 将list添加到请求属性中，以便在JSP页面中使用
            req.setAttribute("booksList", booksList);
//            req.setAttribute("borrowRecordsList", borrowRecordsList);

            // 转发请求到JSP页面
            RequestDispatcher dispatcher = req.getRequestDispatcher("/myBorrowList.jsp");
            dispatcher.forward(req, resp);
        } else {
            // 用户未登录或Session已过期
        }
    }
}
